package top.archiesean.constants;

import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import org.springframework.util.CollectionUtils;

import java.util.HashMap;
import java.util.Set;

/**
 * @author ArchieSean
 * @description 常量
 * @date 2024-04-19
 */
public class Constants {
    public static final HashMap<String, String> JAVA_DATATYPE = Maps.newHashMap();
    public static final HashMap<String, String> JDBC_DATATYPE = Maps.newHashMap();

    public static final Set<String> TEMPLATES = Sets.newHashSet();

    public static final String ENTITY_JAVA_VM = "Entity.java.vm";
    public static final String MAPPER_JAVA_VM = "Mapper.java.vm";
    public static final String SERVICE_BIZ_JAVA_VM = "Service.java.vm";
    public static final String SERVICE_IMPL_JAVA_VM = "ServiceImpl.java.vm";
    public static final String CONTROLLER_JAVA_VM = "Controller.java.vm";
    public static final String MAPPER_XML_VM = "Mapper.xml.vm";
    public static final String TEMPLATE_PREFIX = "template/";
    public static final String COMMON_PATH = "generate/";


    static {
        //数据库类型和java类型映射
        JAVA_DATATYPE.put("tinyint", "Integer");
        JAVA_DATATYPE.put("smallint", "Integer");
        JAVA_DATATYPE.put("mediumint", "Integer");
        JAVA_DATATYPE.put("int", "Integer");
        JAVA_DATATYPE.put("integer", "Integer");
        JAVA_DATATYPE.put("bigint", "Long");
        JAVA_DATATYPE.put("float", "Float");
        JAVA_DATATYPE.put("double", "Double");
        JAVA_DATATYPE.put("decimal", "BigDecimal");
        JAVA_DATATYPE.put("bit", "Boolean");
        JAVA_DATATYPE.put("char", "String");
        JAVA_DATATYPE.put("varchar", "String");
        JAVA_DATATYPE.put("tinytext", "String");
        JAVA_DATATYPE.put("text", "String");
        JAVA_DATATYPE.put("mediumtext", "String");
        JAVA_DATATYPE.put("longtext", "String");
        JAVA_DATATYPE.put("date", "LocalDateTime");
        JAVA_DATATYPE.put("datetime", "LocalDateTime");
        JAVA_DATATYPE.put("timestamp", "LocalDateTime");

        // 数据库类型和jdbc类型映射
        JDBC_DATATYPE.put("tinyint", "TINYINT");
        JDBC_DATATYPE.put("smallint", "SMALLINT");
        JDBC_DATATYPE.put("mediumint", "MEDIUMINT");
        JDBC_DATATYPE.put("int", "INTEGER");
        JDBC_DATATYPE.put("integer", "INTEGER");
        JDBC_DATATYPE.put("bigint", "BIGINT");
        JDBC_DATATYPE.put("float", "FLOAT");
        JDBC_DATATYPE.put("double", "DOUBLE");
        JDBC_DATATYPE.put("decimal", "DECIMAL");
        JDBC_DATATYPE.put("bit", "BIT");
        JDBC_DATATYPE.put("char", "CHAR");
        JDBC_DATATYPE.put("varchar", "VARCHAR");
        JDBC_DATATYPE.put("tinytext", "VARCHAR");
        JDBC_DATATYPE.put("text", "VARCHAR");
        JDBC_DATATYPE.put("mediumtext", "VARCHAR");
        JDBC_DATATYPE.put("longtext", "VARCHAR");
        JDBC_DATATYPE.put("date", "DATE");
        JDBC_DATATYPE.put("datetime", "TIMESTAMP");
        JDBC_DATATYPE.put("timestamp", "TIMESTAMP");
        JDBC_DATATYPE.put("blob", "BLOB");
        JDBC_DATATYPE.put("longblob", "LONGBLOB");


    }

    public static Set<String> getTemplates() {
        if (CollectionUtils.isEmpty(TEMPLATES)) {
            TEMPLATES.add(TEMPLATE_PREFIX + ENTITY_JAVA_VM);
            TEMPLATES.add(TEMPLATE_PREFIX + MAPPER_JAVA_VM);
            TEMPLATES.add(TEMPLATE_PREFIX + MAPPER_XML_VM);
            TEMPLATES.add(TEMPLATE_PREFIX + SERVICE_BIZ_JAVA_VM);
            TEMPLATES.add(TEMPLATE_PREFIX + SERVICE_IMPL_JAVA_VM);
            TEMPLATES.add(TEMPLATE_PREFIX + CONTROLLER_JAVA_VM);
        }
        return TEMPLATES;
    }
}
